package isd.inventario.web;



import java.io.Serializable;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.SessionScoped;

/**
 *
 * @author Claudio, Marcelo
 */
@ManagedBean(name = "inventarioStockBean")
@SessionScoped
public class InventarioStockBean implements Serializable {

//    private final String MODULO_INI   = "INV";
//    private final String CIRCUITO_INI = "0110";
//    private final String MODULO_APL   = "INV";
//    private final String CIRCUITO_APL = "0110";
//    @EJB private CircuitoRN circuitoRN;
//    private CircuitoEtapa circuito;
//
//    //SERVICIOS
//    @EJB
//    private InventarioRN documentoStockRN;
//    @EJB
//    private DepositoRN depositoRN;
//    @EJB
//    private DocumentoStockDAO documentoStockDAO;
//    // MANAGED-BEANS
//    @ManagedProperty(value = "#{usuarioSession}")
//    private UsuarioSession usuarioSession;
//    @ManagedProperty(value = "#{cronologiaBean}")
//    private CronologiaBean cronologiaBean;
//    //ATRIBUTOS
//    private Boolean entrada;
//    private Boolean salida;
//    private MovimientoStock documentoST;
//    private List<MovimientoStock> lista;
//    private List<ItemProductoStock> itemDetalles = new ArrayList<ItemProductoStock>();
//    private List<ItemMovimientoStock> listaProductoSerie;
//
//    public InventarioStockBean() {
//    }
//
//    @PostConstruct
//    public void init() {
//        // SETEAMOS LA LISTA EN CERO CON ITEM VACIO EN ID -1
//        this.setearItem();
//        circuito = circuitoRN.getCircuitoEtapa(MODULO_INI, CIRCUITO_INI, MODULO_APL, CIRCUITO_APL);
//    }
//
//    //ACTIONS
//    //***************************************************
//    private void setearItem() {
//        ItemProductoStock imt = new ItemProductoStock();
//        imt.setId(-1);
//        this.itemDetalles.add(imt);
//    }
//
//    //NAVEGADOR
//    public String goMovimiento(Boolean entrada, Boolean salida) {
//        itemDetalles = new ArrayList<ItemProductoStock>();
//        this.setearItem();
//        this.entrada = entrada;
//        this.salida = salida;
//        cronologiaBean.setBuscar(false); // Oculta el Link para consultas Cronologias
//        String tipoMovimiento = "ST";
//        if (!entrada) {
//            getDocumentoST().setDepositoIngreso(null);
//            tipoMovimiento = "AE";
//        }
//        if (!salida) {
//            getDocumentoST().setDepositoEgreso(null);
//            tipoMovimiento = "AI";
//        }
//        documentoST = documentoStockRN.nuevoMovimiento(circuito,usuarioSession.getUsuario());
//        return "../inventario/inventarioStock.xhtml";
//    }
//
//    // Agrega los Items desde la lista
//    public void agregarItem(ItemMovimientoStock item) {
//        if (item.getProducto() == null) {
//            JsfUtil.addErrorMessage("Inserte el producto");
//        } else if (item.getSerie().isEmpty()) {
//            JsfUtil.addErrorMessage("No puede agregar el producto sin Serie");
//        } else {
//            // Primero sacamos de la lista el item vacio
//            this.itemDetalles.remove(itemDetalles.size() - 1);
//            // Agregamos el producto nuevo
//            ItemProductoStock imt = new ItemProductoStock();
//            imt.setProducto(item.getProducto());
//            imt.setCantidad(item.getCantidad());
//            imt.setSerie(item.getSerie());
//            imt.setCodigoUnidadMedida(item.getProducto().getUnidadMedida().getCodigo());
//            if (this.checkItemRepetido(imt.getProducto().getDescripcion(), imt.getSerie())) {
//                JsfUtil.addErrorMessage("Ya existe el producto en la lista");
//            } else {
//                this.itemDetalles.add(imt);
//            }
//            // Agregamos un item vacio.
//            this.setearItem();
//        }
//    }
//
//    private Boolean checkItemRepetido(String nombre, String serie) {
//        for (ItemMovimientoStock it : this.itemDetalles) {
//            if (it.getProducto().getDescripcion().equals(nombre) && it.getSerie().equals(serie)) {
//                return true;
//            }
//        }
//        return false;
//    }
//
//    //Obtiene el Item sin Producto y lo completa
//    public void seleccionarProductoVacio(ST_Producto p) {
//        // Primero chequeamos que el producto este en ese deposito y tenga Stock.
//        if ((salida && entrada) || (salida && !entrada)) {
//            this.cargarSeries(p);
//            if (listaProductoSerie.isEmpty()) {
//                JsfUtil.addErrorMessage("Este producto no se encuentra en el depósito");
//                return;
//            }
//        }
//        ItemProductoStock imt = itemDetalles.get(itemDetalles.size() - 1);
//        imt.setProducto(p);
//        imt.setCantidad(new BigDecimal(1.00));
//        imt.setSerie("");
//        imt.setCodigoUnidadMedida(p.getUnidadMedida().getCodigo());
//        this.itemDetalles.set(itemDetalles.size() - 1, imt);
//    }
//
//    // Carga los Series del Producto
//    public void cargarSeries(ST_Producto p) {
//        listaProductoSerie = new ArrayList<ItemMovimientoStock>();
//        ST_Deposito deposito = new ST_Deposito();
//        if (!salida) {
//            deposito = documentoST.getDepositoIngreso();
//        } else {
//            deposito = documentoST.getDepositoEgreso();
//        }
//        List<Object[]> listaSeries = documentoStockRN.getSerieByProducto(p, deposito);
//        for (Object[] campo : listaSeries) {
//            ItemMovimientoStock it = new ItemMovimientoStock();
//            it.setSerie((String) campo[1]);
//            it.setCantidad((BigDecimal) campo[0]);
//            //Filtramos los que tiene stock solamente en Movimientos y ajustes de salida
//            if (entrada && !salida) {
//                listaProductoSerie.add(it);
//            } else {
//                if (it.getCantidad().intValue() > 0) {
//                    listaProductoSerie.add(it);
//                }
//            }
//        }
//    }
//
//    // Persiste el Movimiento de Stock y Las Cronologias
//    public void guardar() {
//        //
//        String tipoDoc = "ST";
//        if (!entrada) {
//            this.documentoST.setDepositoIngreso(null);
//            tipoDoc = "AE";
//        }
//        if (!salida) {
//            this.documentoST.setDepositoEgreso(null);
//            tipoDoc = "AI";
//        }
//        //
//        if (entrada && salida) {
//            if (documentoST.getDepositoIngreso().getId() == documentoST.getDepositoEgreso().getId()) {
//                JsfUtil.addErrorMessage("El deposito de Ingreso debe ser diferente al deposito de egreso.");
//                return;
//            }
//        }
//
//        if (this.itemDetalles.size() == 1) {
//            JsfUtil.addErrorMessage("Ingrese un producto a la grilla");
//        } else {
//            try {
//                this.itemDetalles.remove(itemDetalles.size() - 1);
//                for (ItemProductoStock it : itemDetalles) {
//                    documentoST.getItemProducto().add(it);
//                    it.setMovimientoStock(documentoST);
//                }
//                documentoStockRN.guardar(documentoST);
//
//                this.reset(tipoDoc);
//                JsfUtil.addInfoMessage("El movimiento se guardo correctamente");
//            } catch (Exception ex) {
//                JsfUtil.addErrorMessage("No se puede guardar el movimiento");
//            }
//        }
//
//    }
//
//    private void reset(String tipodoc) {
//        documentoST = documentoStockRN.nuevoMovimiento(circuito,usuarioSession.getUsuario());
//        itemDetalles = new ArrayList<ItemProductoStock>();
//        this.setearItem();
//    }
//    // Selecciona el serie
//
//    public void seleccionarSerie(String serie) {
//        ItemProductoStock imt = this.itemDetalles.get(itemDetalles.size() - 1);
//        imt.setSerie(serie);
//        this.itemDetalles.set(itemDetalles.size() - 1, imt);
//    }
//
//    public List<ST_Deposito> getDepositos() {
//        return depositoRN.getLista(true);
//    }
//
//    public void vaciarLista() {
//        itemDetalles.clear();
//        this.setearItem();
//    }
//    // CONVERTERS
//
//    public Converter getConversorDepositos() {
//        return new Converter() {
//
//            @Override
//            public Object getAsObject(FacesContext context, UIComponent component, String value) {
//                if (value.trim().equals("") || value == null) {
//                    return null;
//                }
//                int number = Integer.parseInt(value);
//                ST_Deposito d = depositoRN.getDeposito(number);
//                return d;
//            }
//
//            @Override
//            public String getAsString(FacesContext context, UIComponent component, Object value) {
//                if (value == null || value.equals("")) {
//                    return "";
//                } else {
//                    return ((ST_Deposito) value).getId() + "";
//                }
//            }
//        };
//    }
//
//    public void generarReporte() throws NamingException, SQLException, JRException, IOException {
//        reportFactoryTest rf = new reportFactoryTest();
//        rf.generarReporteInventario(documentoStockRN.getUltimoMovimiento().getId(), "Titulo de este reporte", "1.001");
//    }
//
//    // GETTERS AND SETTERS
//    public List<ST_UnidadMedida> getUnidadesMedida() {
//        return documentoStockDAO.getListaUnidadMedida();
//    }
//
//    public List<ItemProductoStock> getItemDetalles() {
//        return itemDetalles;
//    }
//
//    public void setItemDetalles(List<ItemProductoStock> itemDetalles) {
//        this.itemDetalles = itemDetalles;
//    }
//
//
//
//    /**
//     * @return the usuarioSession
//     */
//    public UsuarioSession getUsuarioSession() {
//        return usuarioSession;
//    }
//
//    /**
//     * @param usuarioSession the usuarioSession to set
//     */
//    public void setUsuarioSession(UsuarioSession usuarioSession) {
//        this.usuarioSession = usuarioSession;
//    }
//
//    /**
//     * @return the listaProductoSerie
//     */
//    public List<ItemMovimientoStock> getListaProductoSerie() {
//        return listaProductoSerie;
//    }
//
//    /**
//     * @param listaProductoSerie the listaProductoSerie to set
//     */
//    public void setListaProductoSerie(List<ItemMovimientoStock> listaProductoSerie) {
//        this.listaProductoSerie = listaProductoSerie;
//    }
//
//    public MovimientoStock getDocumentoST() {
//        if (this.documentoST == null) {
//            documentoST = documentoStockRN.nuevoMovimiento(circuito,usuarioSession.getUsuario());
//        }
//        return documentoST;
//    }
//
//    public void eliminarItem(ItemMovimientoStock item) {
//        itemDetalles.remove(item);
//    }
//
//    public void setDocumentoST(MovimientoStock documentoST) {
//        this.documentoST = documentoST;
//    }
//
//    public List<MovimientoStock> getLista() {
//        return lista;
//    }
//
//    public void setLista(List<MovimientoStock> lista) {
//        this.lista = lista;
//    }
//
//    /**
//     * @return the entrada
//     */
//    public Boolean getEntrada() {
//        return entrada;
//    }
//
//    /**
//     * @param entrada the entrada to set
//     */
//    public void setEntrada(Boolean entrada) {
//        this.entrada = entrada;
//    }
//
//    /**
//     * @return the salida
//     */
//    public Boolean getSalida() {
//        return salida;
//    }
//
//    /**
//     * @param salida the salida to set
//     */
//    public void setSalida(Boolean salida) {
//        this.salida = salida;
//    }
//
//    /**
//     * @return the cronologiaBean
//     */
//    public CronologiaBean getCronologiaBean() {
//        return cronologiaBean;
//    }
//
//    /**
//     * @param cronologiaBean the cronologiaBean to set
//     */
//    public void setCronologiaBean(CronologiaBean cronologiaBean) {
//        this.cronologiaBean = cronologiaBean;
//    }
}
